lexer grammar BaseLexer;

As                          : 'as';
Abstract                    : 'abstract';
Public                      : 'public';
Private                     : 'private';
Protected                   : 'protected';
Export                      : 'export';
Class                       : 'class';
Enum                        : 'enum';
Interface                   : 'interface';
Implements                  : 'implements';
Function                    : 'function';
Readonly                    : 'readonly';
Constructor                 : 'constructor';


Let                         : 'let';
Var                         : 'var';
This                        : 'this';
New                         : 'new';
Super                       : 'super';

False                       : 'false';
True                        : 'true';
Import                      : 'import';
From                        : 'from';
For                         : 'for';
ForEach                     : 'forEach';
While                       : 'while';
Switch                      : 'switch';
Static                      : 'static';
Final                       : 'final';
Case                        : 'case';
Break                       : 'break';
Continue                    : 'continue';
Return                      : 'return';
Default                     : 'default';
If                          : 'if';
Else                        : 'else';
Extends                     : 'extends';
Void                        : 'void';
Throw                       : 'throw';
Try                         : 'try';
Catch                       : 'catch';
Finally                     : 'finally';


//基本类型
String                : 'string'             ;
Char                  : 'char'               ;
Int                   : 'int'                ;
Long                  : 'long'               ;
Float                 : 'float'              ;
Double                : 'double'             ;
Boolean               : 'boolean'            ;
Any                   : 'any'                ;
Object                : 'object'             ;
Null                  : 'null'               ;


OpenBracket                 : '[' ;
CloseBracket                : ']' ;
OpenParen                   : '(' ;
CloseParen                  : ')' ;
OpenBrace                   : '{';
CloseBrace                  : '}';

QuestionMark                : '?';
SemiColon                   : ';';
Comma                       : ',' ;

Assign                      : '=' ;
VarArgs                     : '...' ;
Dot                         : '.' ;
Colon                       : ':';
Ellipsis                    : '...' ;
QUOT                        : '\'';
Not                         : '!' ;

//operator
Multiply                    : '*' ;
Divide                      : '/' ;
Plus                        : '+' ;
Minus                       : '-' ;
Modulo                      : '%' ;
Equal                       : '==' ;
IdentityEqual               : '===' ;
NotEqual                    : '!=' ;
GreaterThan                 : '>' ;
GreaterThanEqual            : '>=' ;
LessThan                    : '<' ;
LessThanEqual               : '<=' ;
And                         : '&&' ;
Or                          : '||' ;
MultiplyAssign              : '*=' ;
DivideAssign                : '/=' ;
ModuloAssign                : '%=' ;
PlusAssign                  : '+=' ;
MinusAssign                 : '-=' ;
PlusPlus                    : '++' ;
MinusMinus                  : '--' ;
Arrow                       : '=>' ;
At                          : '@' ;



NumberLiteral: ('0'|([1-9][0-9]*)) (Dot [0-9]+)?;

StringLiteral: ('"' StringChars '"')|('\'' StringChars '\'') ;

fragment StringChars : (
                 '\\"'
                 | '\\\''
                 | '\\n'
                 | '\\t'
                 | '\\r'
                 | '\\b'
                 | '\\\\'
                 |  .
                 )*? ;

SINGLE_LINE_COMMENT : '//' ~[\r\n]* -> skip; // 匹配单行注释并跳过

MULTI_LINE_COMMENT  : '/*' .*? '*/' -> skip; // 匹配多行注释并跳过

WS: [ \t\n\r]+ -> skip ; // 忽略空白字符



